﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace Classes
{
	public class AltaCliente
	{
		private Cliente cliente;
        DBClientes dbClientes;

		public AltaCliente(DBClientes dbClientes)
		{
            String apellido;
            String nombre;
            String dni;
            String domicilio;
            String telefono;
            String fechaNac;
            String pais;
            
            bool resultado = false;

            Console.Clear();
            Console.WriteLine("Ingreso de Nuevo Cliente:");
            Console.WriteLine("Desea Continuar? (S)i, (N)o");

            this.dbClientes = dbClientes;

            if (PreguntaSiNo())
            {
                Console.Clear();
                do
                {
                    do
                    {
                        Console.Write("Ingrese Apellido: ");
                        apellido = Console.ReadLine();

                        Console.Write("Ingrese Nombres: ");
                        nombre = Console.ReadLine();

                    }
                    while (ValidarNombre(apellido, nombre) == false);

                    do
                    {
                        Console.Write("Ingrese Dni: ");
                        dni = Console.ReadLine();
                    }
                    while (!ValidarDNI(dni));
                
                    Console.Write("Ingrese Calle (Domicilio): ");
                    domicilio = Console.ReadLine();

                    Console.Write("Ingrese Nacionalidad: ");
                    pais = Console.ReadLine();

                    fechaNac = "";
                    do
                    {
                        Console.Write("Ingrese Fecha de nacimiento: ");
                        fechaNac = Console.ReadLine();
                    }
                    while (ValidarFecha(fechaNac) == false);

                    do
                    {
                        Console.Write("Ingrese el Numero de Telefono: ");
                        telefono = Console.ReadLine();
                    }
                    while (!ValidarTelefono(telefono));


                    this.cliente = new Cliente(nombre, apellido, dni, domicilio, telefono, fechaNac, pais);

                    if (!Guardar(cliente))
                    {
                        Console.WriteLine(" ");
                        Console.WriteLine("Desea volver a intentarlo? (S)i, (N)o");

                        resultado = PreguntaSiNo();
                    }

                }
                while (resultado);

            }
            else
                Console.WriteLine("Operacion Cancelada");
		}

        public bool ValidarNombre(string apellido, string nombre)
        {
            if ((nombre.Length == 0) || (apellido.Length == 0))
            {
                Console.Clear();
                Console.WriteLine("Debe Ingresar un Apellido y un Nombre");
                return false;
            }
            return true;
        }

        public bool ValidarFecha(string fechaNac)
        {
            try
            {
                if (DateTime.Parse(fechaNac) == DateTime.MinValue)
                {
                    Console.Clear();
                    Console.WriteLine("Debe Ingresar una Fecha Valida (dd-mm-aaaa)");
                    return false;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Debe Ingresar una Fecha Valida (dd-mm-aaaa)");
                return false;
            }

            return true;
        }

        public bool ValidarDNI(string dni)
        {
            if (Regex.Match(dni, @"^[0-9]?[0-9][0-9][0-9][0-9][0-9][0-9][0-9]$").Success)
                return true;
            Console.WriteLine("DNI invalido, por favor ingrese un DNI Valido");
            return false;
        }

        public Boolean Guardar(Cliente cliente)
        {
            if (this.dbClientes.VerificarClienteExistente(cliente))
            {
                dbClientes.AgregarCliente(cliente);
                Console.WriteLine("Cliente Guardado Exitosamente");
                Console.ReadKey();
                return true;
            }

            //Console.Clear(); sino no se ve que ya está creado
            Console.WriteLine("Operacion Cancelada");
            Console.ReadKey();
            return false;
        }

        public bool ValidarTelefono(string telefono)
        {
            if (Regex.Match(telefono, @"^[45][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$").Success)
                return true;
            Console.WriteLine("El Numero Telefono ingresado es incorrecto, por favor ingrese un Numero Telefono valido");
            return false;
        }

        public Boolean PreguntaSiNo()
        {
            ConsoleKeyInfo tecla;
            string resultado;

            do
            {
                tecla = Console.ReadKey(true);
                resultado = tecla.KeyChar.ToString();
            }
            while (!(resultado == "S" || resultado == "s" || resultado == "N" || resultado == "n"));

            if (resultado == "S" || resultado == "s")
                return true;
            else //mepa q faltaba. Mariana
            return false;
        }
	}
}
